import http.server
import socketserver
import requests
import time
import threading
import json
import os

# 服务器处理类，用于响应 GET 请求
class ChineseCharHandler(http.server.BaseHTTPRequestHandler):
    def do_GET(self):
        # 设置响应状态码
        self.send_response(200)
        # 设置响应头（JSON 格式，UTF-8 编码）
        self.send_header('Content-Type', 'application/json; charset=utf-8')
        self.end_headers()
        
        # 读取 JSON 文件内容（注意：路径需根据实际情况调整）
        json_file_path = './src/八_汉字模型.json'
        try:
            with open(json_file_path, 'r', encoding='utf-8') as f:
                json_content = f.read()
            # 发送 JSON 内容到客户端
            self.wfile.write(json_content.encode('utf-8'))
        except FileNotFoundError:
            # 如果文件不存在，返回错误信息
            error_msg = json.dumps({"error": "JSON 文件不存在"})
            self.wfile.write(error_msg.encode('utf-8'))

# 启动 HTTP 服务器
def start_server():
    # 服务器地址和端口
    host = '127.0.0.1'
    port = 8080
    
    # 创建服务器实例，指定处理类
    server = socketserver.TCPServer((host, port), ChineseCharHandler)
    print(f"服务器启动成功，监听 {host}:{port}")
    
    # 启动服务器（持续运行，直到手动停止）
    server.serve_forever()

# 客户端请求函数
def start_client():
    # 服务器 URL
    url = 'http://127.0.0.1:8080'
    
    try:
        # 发送 GET 请求
        response = requests.get(url)
        # 确保请求成功
        response.raise_for_status()
        
        # 读取并打印响应内容（格式化 JSON 以便查看）
        json_data = response.json()
        print("客户端收到响应：")
        print(json.dumps(json_data, indent=2, ensure_ascii=False))
        
    except requests.exceptions.RequestException as e:
        print(f"客户端请求失败：{e}")

# 主函数
if __name__ == "__main__":
    # 创建并启动服务器线程（避免阻塞主线程）
    server_thread = threading.Thread(target=start_server, daemon=True)
    server_thread.start()
    
    # 等待服务器启动（避免客户端过早请求）
    time.sleep(1)
    
    # 运行客户端
    start_client()
    
    # 等待用户输入，防止程序立即退出（可选）
    input("\n按 Enter 键停止程序...\n")